package com.weijian.service;

import com.weijian.dal.enums.ChartType;
import com.weijian.dto.data.ChartColumn;
import com.weijian.dto.data.ChartData;
import com.weijian.dto.data.QueryResult;

import java.util.List;

/**
 * 图表推荐服务接口
 * 基于查询结果的数据特征，智能推荐最合适的图表类型
 *
 * @author miaoma
 */
public interface ChartRecommendationService {

    /**
     * 基于查询结果构建图表数据，包括图表类型推荐
     * 优先使用AI推荐的图表类型，如果AI没有推荐则使用后端规则推荐
     *
     * @param queryResult       SQL查询结果
     * @param aiRecommendedCharts AI推荐的图表类型列表（可为null）
     * @return 图表数据，包含推荐的图表类型和列元数据
     */
    ChartData buildChartData(QueryResult queryResult, List<ChartType> aiRecommendedCharts);

    /**
     * 基于查询结果构建图表数据，包括图表类型推荐（使用后端规则推荐）
     *
     * @param queryResult SQL查询结果
     * @return 图表数据，包含推荐的图表类型和列元数据
     * @deprecated 使用 {@link #buildChartData(QueryResult, List)} 替代
     */
    @Deprecated
    default ChartData buildChartData(QueryResult queryResult) {
        return buildChartData(queryResult, null);
    }

    /**
     * 推荐图表类型
     *
     * @param columns  列元数据列表
     * @param rowCount 数据行数
     * @return 推荐的图表类型
     */
    ChartType recommendChartType(List<ChartColumn> columns, int rowCount);
}
